﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.ComponentModel;
using Dados;

namespace Negocios
{
    [DataObject]
    public class ImagemBLL
    {
        /*public void Consulta2(Autor a)
        {
            try
            {
                DSMPTUDO.T_AUTORDataTable autorDT = AutorDAL.ConsultaPorCodigo(a.Codigo);
                a.Nome = autorDT[0].tx_nome;
                a.Tipo = autorDT[0].nr_tipo;
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao consultar Autor: " + ex.Message);
            }
        }*/

        [DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
        public Imagem Consulta(int codigo)
        {

            try
            {
                DSMPTUDO.T_IMAGEMDataTable imagemDT = ImagemDAL.consultarPorCodigo(codigo);

                if (imagemDT.Count == 1)
                {
                    Evento eventoOB = new Evento(imagemDT[0].nr_evento);
                    Autor autorOB = new Autor(imagemDT[0].nr_autor);
                    Formato formatoOB = new Formato(imagemDT[0].nr_formato);
                    Especificacao especificacaoOB = new Especificacao(imagemDT[0].nr_especificacao);
                    SoftwareDeReproducao softwareOB = new SoftwareDeReproducao(imagemDT[0].nr_software);
                    Usuario u = new Usuario(imagemDT[0].tx_usuario);

                    return (new Imagem(codigo, imagemDT[0].tx_nome, imagemDT[0].tx_localizacao, eventoOB, autorOB, formatoOB, especificacaoOB, softwareOB, u));
                }
                else return null;
            }


            catch (Exception ex)
            {
                throw new Exception("Erro ao consultar Imagem: " + ex.Message);
            }
        }
        [DataObjectMethodAttribute(DataObjectMethodType.Select, false)]
        public static List<Imagem> ConsultaTodos()
        {
            try
            {
                List<Imagem> Imagens = new List<Imagem>();
                DSMPTUDO.T_IMAGEMDataTable imagemDT = ImagemDAL.consultarTodos();



                SoftwareDeReproducao softwareOB = new SoftwareDeReproducao(imagemDT[0].nr_software);
                for (int i = 0; i < imagemDT.Count; i++)
                {
                    Evento eventoOB = new Evento(imagemDT[i].nr_evento);
                    Autor autorOB = new Autor(imagemDT[i].nr_autor);
                    Formato formatoOB = new Formato(imagemDT[i].nr_formato);
                    Especificacao especificacaoOB = new Especificacao(imagemDT[i].nr_especificacao);
                    Usuario u = new Usuario(imagemDT[i].tx_usuario);
                    Imagem a = new Imagem(imagemDT[i].nr_codigo, imagemDT[i].tx_nome, imagemDT[i].tx_localizacao, eventoOB, autorOB, formatoOB, especificacaoOB, softwareOB, u);
                    Imagens.Add(a);
                }
                return Imagens;

            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao consultar Imagem: " + ex.Message);
            }
        }
        [DataObjectMethodAttribute(DataObjectMethodType.Insert, true)]
        public bool Insere(Imagem a)
        {
            try
            {
                if (Consulta(a.Cod) != null)
                    throw new SystemException("Erro ao inserir, imagem existente!");

                return ImagemDAL.insere(a.Nome, a.Localizacao, a.Evento.Codigo, a.Autor.Codigo, a.Formato.Codigo, a.Especificacao.Codigo, a.Software.Codigo, a.Usuario.Id);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao inserir Imagem: " + ex.Message);
            }
        }
        [DataObjectMethodAttribute(DataObjectMethodType.Update, true)]
        public bool Atualiza(Imagem a)
        {
            try
            {
                return ImagemDAL.atualizar(a.Nome, a.Localizacao, a.Evento.Codigo, a.Autor.Codigo, a.Formato.Codigo, a.Especificacao.Codigo, a.Software.Codigo, a.Usuario.Id, a.Cod);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao atualizar Imagem: " + ex.Message);
            }
        }
        [DataObjectMethodAttribute(DataObjectMethodType.Delete, true)]
        public bool Remove(Imagem a)
        {
            try
            {
                return ImagemDAL.excluir(a.Cod);
            }
            catch (Exception ex)
            {
                throw new Exception("Erro ao remover Imagem: " + ex.Message);
            }
        }
        [DataObjectMethodAttribute(DataObjectMethodType.Select, true)]
        public List<Imagem> ConsultarParametros(string nome, int evento, int autor, int formato, int especificacao, int software)
        {
            List<Imagem> Lista = new List<Imagem>();
            DSMPTUDO.T_IMAGEMDataTable imagemDT = ImagemDAL.ConsultaPorParametro(nome, evento, autor, formato, especificacao, software);



            if (imagemDT.Count > 0)
            {
                for (int i = 0; i < imagemDT.Count; i++)
                {
                    EventoBLL eventoBLL = new EventoBLL();
                    AutorBLL autorBLL = new AutorBLL();
                    FormatoBLL formatoBLL = new FormatoBLL();
                    EspecificacaoBLL especificacaoBLL = new EspecificacaoBLL();
                    Software_De_ReproducaoBLL softwareBLL = new Software_De_ReproducaoBLL();
                    UsuarioBLL usuarioBLL = new UsuarioBLL();


                    Evento e = eventoBLL.Consultar(imagemDT[i].nr_evento);
                    Autor a = autorBLL.Consulta(imagemDT[i].nr_autor);
                    Formato f = formatoBLL.Consulta(imagemDT[i].nr_formato);
                    Especificacao esp = especificacaoBLL.Consultar(imagemDT[i].nr_especificacao);
                    SoftwareDeReproducao s =softwareBLL.Consulta(imagemDT[i].nr_software);
                    Usuario u = usuarioBLL.Consulta(imagemDT[i].tx_usuario);
                    

                    if (nome == null)
                    { nome = ""; }

                    Imagem img = new Imagem(imagemDT[i].tx_nome,imagemDT[i].tx_localizacao,e,a,f,esp,s,u);
                    Lista.Add(img);
                }
                return Lista;
            }
            else
                return null;
        }
    }
}

